package com.example.memento.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import jakarta.validation.constraints.Size;
import java.time.LocalDateTime;
import java.util.Map;

/**
 * 词解释条目对象
 * 包含词的具体解释信息，包括来源、详情等
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@JsonIgnoreProperties(ignoreUnknown = true)
public class ExplanationEntry {
    
    /**
     * 来源（词典源名称、参考文献等）
     */
    @Size(max = 200, message = "来源长度不能超过200个字符")
    private String source;
    
    /**
     * 详情/解释内容
     */
    @Size(max = 5000, message = "详情长度不能超过5000个字符")
    private String detail;
    
    /**
     * 解释类型（如：定义、翻译、例句、用法等）
     */
    @Size(max = 50, message = "解释类型长度不能超过50个字符")
    private String type;
    
    /**
     * 语言代码（如：zh-CN, en-US）
     */
    @Size(max = 20, message = "语言代码长度不能超过20个字符")
    private String language;
    
    /**
     * 优先级/权重（数值越大优先级越高）
     */
    private Integer priority;
    
    /**
     * 置信度（0.0-1.0）
     */
    private Double confidence;
    
    /**
     * 扩展信息（JSON格式，存储额外的元数据）
     */
    private Map<String, Object> metadata;
    
    /**
     * 创建时间
     */
    private LocalDateTime createdAt;
    
    /**
     * 更新时间
     */
    private LocalDateTime updatedAt;
    
    /**
     * 设置创建时间戳
     */
    public void onCreate() {
        if (createdAt == null) {
            createdAt = LocalDateTime.now();
        }
        updatedAt = LocalDateTime.now();
    }
    
    /**
     * 设置更新时间戳
     */
    public void onUpdate() {
        updatedAt = LocalDateTime.now();
    }
    
    /**
     * 检查是否有有效内容
     */
    public boolean hasContent() {
        return (detail != null && !detail.trim().isEmpty()) ||
               (source != null && !source.trim().isEmpty());
    }
}

